import {reportError} from '@/api/monitor/monitorApi';

export default function ErrorMonitor() {
	// 基础错误监听
	uni.onError((error) => {
		logError('JS_ERROR', error);
	});

	// Vue错误
	// Vue.config.errorHandler = (err, vm, info) => {
	// 	logError('VUE_ERROR', { err, info });
	// };

	// Promise错误（H5）
	// #ifdef H5
	window.addEventListener('unhandledrejection', (e) => {
		logError('PROMISE_ERROR', e.reason);
	});
	// #endif

	// 小程序Promise错误
	// #ifdef MP-WEIXIN
	wx.onUnhandledRejection?.(res => {
		logError('PROMISE_ERROR', res.reason);
	});
	// #endif

	// App端异常
	// #ifdef APP-PLUS
	plus.globalEvent.addEventListener('uncaughtException', (e) => {
		logError('APP_ERROR', e);
	});
	// #endif
}

export function logError(type:string, error) {
	const pages = getCurrentPages();
	const errorInfo = {
		type,
		message: error?.message || error.toString(),
		stack: error?.stack,
		page: pages.length ? pages[pages.length - 1].route : 'App',
		timestamp: Date.now(),
		system: uni.getSystemInfoSync(),
		user: uni.getStorageSync('userInfo')
	};

	// 实际发送逻辑替换为埋点SDK
	console.error('Error logged:', errorInfo);
	
	
	//异步上传到服务器
	reportError({errorInfo});

}